package com.freeter.modules.gjs.service.impl;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.freeter.common.exception.RRException;
import com.freeter.common.utils.PasswordUtil;
import com.freeter.common.validator.Assert;
import com.freeter.modules.gjs.entity.MstrSite;
import com.freeter.modules.gjs.entity.User;
import com.freeter.modules.gjs.entity.UsersSites;
import com.freeter.modules.gjs.mapper.UserMapper;
import com.freeter.modules.gjs.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
    @Autowired private UserMapper userMapper;

    @Override
    public List<User> listUsers(HttpSession session) {
        // 权限校验（略，可补充）
        // 查询所有用户（未删除）
        EntityWrapper<User> wrapper = new EntityWrapper<>();
        wrapper.eq("is_deleted", false);
        return userMapper.selectList(wrapper);
    }

    @Override
    @Transactional
    public ResponseEntity<?> changePassword(Object req, HttpSession session) {
        // 这里只做示例，实际应根据Entity参数实现
        return ResponseEntity.ok().build();
    }

    @Override
    public User findByEmail(String email) {
        User user = new User();
        user.setLogin(email);
        return userMapper.selectOne(user);
    }

    @Override
    public User registerByMs365(String email, String name) {
        User user = new User();
        user.setLogin(email);
        user.setName(name);
        user.setEnabled(1);
        user.setIsDeleted(0);
        userMapper.insert(user);
        return user;
    }


//    @Override
//    public Map<String, Object> login(LoginForm form) {
//        UserFrontEntity user = null;
//        if("feishu".equals(form.getLoginType())) {
//            EntityWrapper<UserFrontEntity> ew = new EntityWrapper<UserFrontEntity>();
//            ew.eq("open_id",form.getPhone());
//            ew.eq("status",1);
//            user = this.selectOne(ew);
//            if(null == user){
//                throw new RRException("从飞书登陆平台出错");
//            }
//
//        }else {
//            user = queryByMobile(form.getPhone());
//            if(user.getLoginType().intValue() != 0 &&  user.getLoginType().intValue() != 1 ){
//                throw new RRException("不允许密码登录，请改为人脸登录");
//            }
//            Assert.isNull(user, "手机号错误");
//
//            // 密码错误
//            String pwd = PasswordUtil.sha256(form.getPassword(), user.getSalt());
//            if (!user.getPassword().equals(pwd)) {
//                throw new RRException("手机号或密码错误");
//            }
//            if(user.getStatus().intValue() == 0 ){
//                throw new RRException("账号已禁用");
//            }
//        }
//        // 获取登录token
//        // TokenEntity tokenEntity = tokenService.createToken(user.getUserId());
//        // 生成token
//
//        /*
//         * Map<String, Object> map = new HashMap<>(2); map.put("token",
//         * tokenEntity.getToken()); map.put("expire",
//         * tokenEntity.getExpireTime().getTime() - System.currentTimeMillis());
//         */
//        String token = jwtUtils.generateToken(JSONObject.toJSONString(user));
//        Map<String, Object> map = new HashMap<>();
//        map.put("token", token);
//        map.put("expire", jwtUtils.getExpire());
//        user.setPassword(null);
//        map.put("user", user);
//
//        //加载用户角色和菜单
//        List<String> roles = userDao.getUserRole(user.getUserId());
//
//        String otherLoginToken = redisUtils.get(user.getUserId() + "_loginToken");
//        if(StringUtils.isNotBlank(otherLoginToken)){
//            map.put("loginOther","其他终端登录");
//        }
//        //缓存这个用的登录token 给后台禁用用户的时候提供准备
//        redisUtils.set(user.getUserId()+"_loginToken",token);
//        //设置失效时间，不放在token里就是登录后访问即更新这个有效时间
//        redisUtils.set(token+"_loginToken_exp", DateUtil.format(jwtUtils.getExpDate(), DatePattern.PURE_DATETIME_MS_FORMAT));
//        //List<String> menus = userDao.getMenu(user.getUserId());
//        map.put("roles",roles);
//        //map.put("menus",menus);
//
//        //分配一个终端id ,识别用户登录是不是更换了设备
//        String uuid = UUID.randomUUID().toString();
//        map.put("deviceNo",uuid);
//        userDao.updateUserDeviceId(uuid,user.getUserId());
//
//
//        return map;
//    }

} 